# ifndef __GRUPO__H_

# define __GRUPO__H_

# include "figura.h"

# include "rectangulo.h"

# include <list>

using namespace std;

class Grupo: public Figura
{
	public:
		
		Grupo()
		{
		};
		
		Grupo(const Grupo& g):Figura(g), elementos(g.elementos)
		{
		};
		
		~Grupo()
		{
			elementos.clear();
			
			caja.~Rectangulo();
		};
		
		void anyadirElemento(Figura*);
		
		bool retirarElemento(Figura*);
		
		virtual Punto supIzq()
		{
			return (caja.supIzq());
		};
		
		virtual Punto infDer()
		{
			return (caja.infDer());
		};
		
		virtual string Texto(int = 0);
		
		virtual bool seleccionar(float, float);
		
		bool contenida(Punto, Punto);
		
		void limpiarGrupo() 
		{
			elementos.clear();
		};
		
		virtual void redimensionar(float, float);
		
		virtual void trasladar(float, float);
		
		Rectangulo getCaja()
		{
			return caja;
		};

		list<Figura*>& getElementos ()
		{
			return (elementos);
		};
		
		virtual Grupo* clonar ();
		
		virtual list<Figura*> pintar()
		{
			list<Figura*> ret;
			
			list<Figura*> aux;
			
			for (list<Figura*>::iterator i = elementos.begin(); i != elementos.end(); i++)
			{
				aux = (*i)->pintar();
				
				ret.splice(ret.end(), aux);
			} 
			
			return ret;
		}
		
		void calcularCaja();
		
		void setCR (int nR);
		
		void setCB (int nB);
		
		void setCG (int nG);		
		
	private:
	
		list<Figura*> elementos;
		
		Rectangulo caja;
};

# endif
